package com.shensi.appCollect.utils.yunpay;

import com.alibaba.fastjson.JSON;
import com.saobei.open.sdk.DefaultSaobeiApiClient;
import com.saobei.open.sdk.model.requst.trade.SaobeiMiniPayRequest;
import com.saobei.open.sdk.model.response.trade.SaobeiMiniPayResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;

/*
 * <Title> SBPayUtil </Title>
 * <Description> 扫呗（圈圈、云闪付）第三方支付聚合接口  </Description>
 * @Date：2021年10月28日
 * @Author： JK
 */
public class SBPayUtil {

    private static Logger logger =(Logger) LoggerFactory.getLogger(SBPayUtil.class);

    /*
     * 扫呗支付
     * @param sbPayUtil
     * @return
     */
    public static HashMap saoBeiTradePay(SBPayParam sbPayParam){
        HashMap reqData = new HashMap();
        try {
            DefaultSaobeiApiClient defaultSaobeiApiClient = new DefaultSaobeiApiClient(sbPayParam.getKey());
            SaobeiMiniPayRequest requst = new SaobeiMiniPayRequest();

            //用户类型
            switch (sbPayParam.getUserType()){
                case "1":       //微信用户
                    requst.setPay_type("010");
                    requst.setSub_appid(sbPayParam.getAppId());             //小程序appId
                    break;
                case "2":      //支付宝用户
                    requst.setPay_type("020");
                    requst.setSub_appid("2021002194660904");
                    break;
            }

            //支付渠道来源：1、小程序；2公众号；
            switch (sbPayParam.getAppPayType()){
                case "1":       //小程序
                    requst.setService_id("015");    //小程序支付为015；公众号支付为012；
                    requst.setPay_ver("100");
                    break;
                case "2":       //公众号
                    requst.setPay_ver("110");
                    requst.setService_id("012");    //小程序支付为015；公众号支付为012；
                    break;
            }
            requst.setMerchant_no(sbPayParam.getMerchantNo());                 //商户号   845104816000034
            requst.setTerminal_id(sbPayParam.getTerminalId());                 //终端号   18241101
            requst.setTerminal_trace(sbPayParam.getOrdNo());                   //订单号   202003252204310000 6683315853083916109905
            requst.setTerminal_time(new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()));      //"20200325220431"
            //云闪付单位为分
            BigDecimal totalFee = new BigDecimal(sbPayParam.getAmt()).multiply(new BigDecimal("100")).setScale(0, BigDecimal.ROUND_DOWN);
            requst.setTotal_fee(totalFee.toString());               //金额
            requst.setOpen_id(sbPayParam.getOpenId());              // oRwjv4iHjSUgxNxOJOQ_60Ln7cno
            requst.setOrder_body(sbPayParam.getOrderBody());        //订单内容
            requst.setNotify_url(sbPayParam.getNotifyUrl());        //回调地址

            logger.info("请求报文：" + JSON.toJSONString(requst));
            SaobeiMiniPayResponse response = (SaobeiMiniPayResponse) defaultSaobeiApiClient.execute(requst);
            logger.info("返回报文：" + JSON.toJSONString(response));

            if(response !=null && response.getResult_code().equals("01")){

                reqData.put("payTimeStamp", response.getTimeStamp());
                reqData.put("payPackage", response.getPackage_str());
                reqData.put("paynonceStr", response.getNonceStr());
                reqData.put("paySignType", response.getSignType());
                reqData.put("paySign", response.getPaySign());
                reqData.put("return_msg", response.getReturn_msg());
                reqData.put("merchant_name", response.getMerchant_name());
                reqData.put("total_fee", response.getTotal_fee());
                reqData.put("terminal_time", response.getTerminal_time());
                reqData.put("terminal_trace", response.getTerminal_trace());
                reqData.put("code", response.getResult_code());
                reqData.put("merchantsNumber", response.getOut_trade_no());

//                reqData.put("payTimeStamp", response.getTimeStamp());
//                reqData.put("payPackage", response.getPackage_str());
//                reqData.put("signType", response.getSignType());
//                reqData.put("paySign", response.getPaySign());
//                reqData.put("msg", response.getReturn_msg());
//                reqData.put("merchant_name", response.getMerchant_name());
//                reqData.put("total_fee", response.getTotal_fee());
//                reqData.put("terminal_time", response.getTerminal_time());
//                reqData.put("terminal_trace", response.getTerminal_trace());
//                reqData.put("code", response.getResult_code());
            }else if(response !=null && response.getResult_code().equals("02")){
                reqData.put("code", response.getResult_code());
                reqData.put("msg", response.getReturn_msg());
            }else {
                //自己定义的参数
                reqData.put("code", "03");
                reqData.put("msg", "当前支付系统参数配置错误请检查！");
            }
            logger.info("云闪付返回给前端字段：" + JSON.toJSONString(reqData));
        }catch (Exception e){
            e.printStackTrace();
        }
        return reqData;
    }


}
